// AIP 表单操作工具脚本，此文件需要修改的主要内容即为生产环境的签章服务器地址【serverURL】

//签章服务器地址
var serverURL = "http://39.104.114.135:9230/Seal/general/interface/";

/****************************************************************************************************

 方法名：getAipObj                    获取AIP对象
 参  数：                            无
 返回值： AipObj

 *****************************************************************************************************/

function getAipObj() {
    var AipObj = document.getElementById("HWPostil1");
    if (AipObj != null) {
        AipObj.Logout()
        AipObj.JSEnv = 1;
        return AipObj;
    }
    alert("AIP对象获取失败");
}

/****************************************************************************************************

 方法名：remoteLogin                登录远程签章服务器
 参  数：AipObj                        签章服务器对象
 返回值： islogin                    Boolean类型值
 *****************************************************************************************************/

function remoteLogin(AipObj) {
    var islogin = AipObj.Login("", 3, 65535, "", serverURL);
    if (islogin == -200) {
        alert("请检查是否插入了电子签章");
        return islogin;
    } else if (islogin != 0) {
        alert("登陆失败");
        return islogin;
    }
    return islogin;
}

/****************************************************************************************************

 方法名：loadCLOB                        加载单个大字段
 参  数：str                            大字段的base64编码
 返回值： islogin                        Boolean类型值
 *****************************************************************************************************/

function loadCLOB(AipObj, str) {
    AipObj.CloseDoc(0);
    if (str != undefined && str != null && str != "") {
        var IsOpen = AipObj.LoadFileBase64(str);
        if (IsOpen != 0) {
            return IsOpen;
        }
        return IsOpen;
    }
}

/****************************************************************************************************

 方法名：loadFile                        加载文件
 参  数：url                            文件路径

 *****************************************************************************************************/

function loadFile(AipObj, url) {
    if (url != undefined && url != null && url != "") {
        var IsOpen = AipObj.LoadFile(url);
        if (IsOpen != 1) {
            alert("打开文档失败！");
            return IsOpen;
        }
        return IsOpen;
    }
    alert("文档路径为空");
    return -500;//自定义错误 -500
}

/****************************************************************************************************

 方法名：mergeCLOB                        合并大字段
 参  数：strarr                            大字段数组

 *****************************************************************************************************/

function mergeCLOB(AipObj, strarr) {
    if (strarr instanceof Array) {
        //合并文件需要先登录，这里默认使用测试账户登录
        AipObj.Login("HWSEALDEMO**", 4, 65535, "DEMO", "");
        var success = 0;
        for (var i = 0; i < strarr.length; i++) {
            success = AipObj.MergeFile(999, 'STRDATA:' + strarr[i]);
        }
        if (success != 1) {
            alert("合并查看文件失败！");
            return success;
        }
        AipObj.Logout();
        return success;
    }
    alert("参数不是数组对象");
}

/****************************************************************************************************

 方法名：getCLOB                        获取大字段
 返回值：clob                            大字段字符串
 *****************************************************************************************************/
function getCLOB(AipObj) {
    return AipObj.GetCurrFileBase64();
}

/****************************************************************************************************

 方法名：SetFullScreen                    设置全屏
 参  数：SetLog                            设置状态：1全屏，0正常

 *****************************************************************************************************/
function SetFullScreen(AipObj, SetLog) {
    AipObj.ShowFullScreen = SetLog;
}

/****************************************************************************************************

 方法名：SetPageMode                    设置视图
 参  数：SetLog                            设置操作状态：1 原始大小，2 适应宽度，3 窗口大小，4 双页显示，5 无边框，32 阅读模式

 *****************************************************************************************************/

var yuedu = 0;

function SetPageMode(AipObj, SetLog) {
    if (SetLog == 1) {
        AipObj.SetPageMode(1, 100);
    } else if (SetLog == 2) {
        AipObj.SetPageMode(2, 100);
    } else if (SetLog == 3) {
        AipObj.SetPageMode(4, 100);
    } else if (SetLog == 4) {
        AipObj.SetPageMode(8, 2);
    } else if (SetLog == 5) {
        AipObj.SetPageMode(16, 1);
    } else if (SetLog == 32) {
        // 切换阅读模式
        yuedu = (++yuedu) % 2;
        AipObj.SetPageMode(32, yuedu);
    }
}

/****************************************************************************************************

 方法名：SetAction                        设置鼠标状态
 参  数：SetLog                            设置状态：1 浏览，2 文字选择 ， 16 橡皮擦，264 手写

 *****************************************************************************************************/
function SetAction(AipObj, SetLog) {
    AipObj.CurrAction = SetLog;
}

/****************************************************************************************************

 方法名：SetPenwidth                        设置手写笔宽
 参  数：无

 *****************************************************************************************************/
function SetPenwidth(AipObj) {
    if (AipObj == "") {
        alert("AIP对象获取失败");
    }
    AipObj.CurrPenWidth = -1;
}

/****************************************************************************************************

 方法名：SetColor                        设置手写笔颜色
 参  数：无

 *****************************************************************************************************/
function SetColor(AipObj) {
    if (AipObj == "") {
        alert("AIP对象获取失败");
    }
    AipObj.CurrPenColor = -1;
}

/****************************************************************************************************

 方法名：SetPressurelevel                设置手写压感
 参  数：无

 *****************************************************************************************************/
function SetPressurelevel(AipObj) {
    AipObj.Pressurelevel = -1;
}

/****************************************************************************************************

 方法名：ShowToolBar                        设置工具栏
 参  数：SetLog                            设置状态：0 隐藏，1 显示

 *****************************************************************************************************/
function ShowToolBar(AipObj, SetLog) {
    if (AipObj == "") {
        alert("AIP对象获取失败");
    }
    AipObj.ShowToolBar = SetLog;
}

/****************************************************************************************************

 方法名：ShowDefMenu                        设置菜单
 参  数：SetLog                            设置状态：0 隐藏，1 显示

 *****************************************************************************************************/
function ShowDefMenu(AipObj, SetLog) {
    if (AipObj == "") {
        alert("AIP对象获取失败");
    }
    AipObj.ShowDefMenu = SetLog;
}

/****************************************************************************************************

 方法名：ShowScrollBarButton                设置滚动条
 参  数：SetLog                            设置状态：2 隐藏滚动条，1 隐藏滚动条的工具栏，0 显示滚动条

 *****************************************************************************************************/
function ShowScrollBarButton(AipObj, SetLog) {
    if (AipObj == "") {
        alert("AIP对象获取失败");
    }
    AipObj.ShowScrollBarButton = SetLog;
}

/****************************************************************************************************

 方法名：FilePrint                        打印文档
 参  数：plog                            0快速打印，1有打印对话框

 *****************************************************************************************************/
function FilePrint(AipObj, plog) {
    var islogin = remoteLogin(AipObj);//登陆远程服务器
    if (islogin == 0) {
        var isprint = AipObj.PrintDoc(1, plog);
        if (isprint == 0) {
            alert("打印失败！");
        }
    }
}

/****************************************************************************************************

 方法名：FileSaveTo                        文件另存。
 参  数：plog                            0保存不关闭。保存且关闭。
 Object.SaveTo("c:\\aip.aip","aip",plog);
 *****************************************************************************************************/
function FileSaveTo(AipObj, url, type, plog) {
    var islogin = remoteLogin(AipObj);//登陆远程服务器
    if (islogin == 0) {
        var isSaveTo = AipObj.SaveTo(url, type, plog);
        if (isSaveTo == 0) {
            alert("保存失败！");
        }
    }
}

/****************************************************************************************************

 方法名：removeSeal                    撤章(撤销当前章节点)

 *****************************************************************************************************/
function removeSeal(AipObj) {
    var islogin = remoteLogin(AipObj);//登陆远程服务器
    if (islogin != 0) {
        return "-500";//默认自定义错误 登陆失败
    } else {
        var curuser = AipObj.GetSerialNumber();
        var NoteInfo = AipObj.GetNextNote(curuser, 0, "");
        var count = AipObj.DeleteNote(NoteInfo);
        return count;
    }
}

/****************************************************************************************************

 方法名：addMakePerson                        添加档案导入制作人(必须插入电子签章)
 参  数：SetLog                            设置状态：2 隐藏滚动条，1 隐藏滚动条的工具栏，0 显示滚动条

 *****************************************************************************************************/
function addMakePerson(AipObj) {
    var islogin = remoteLogin(AipObj);//登陆远程服务器
    var IsOpen = loadFile(AipObj, path);//加载文档
    if (islogin == 0 && IsOpen == 1) {
        var vNoteName = "Page1.PageText3";
        AipObj.InsertNote(vNoteName, 0, 3, "800", "48000", "7000", "1600");//添加编辑域 局里左边距 800 上边距 48000 组件宽度7000 组件高度1600
        AipObj.Setvalue(vNoteName, ":PROP:BORDER:0");//设置区域无边框
        AipObj.Setvalue(vNoteName, ":PROP::LABEL:1"); //设置为不可编辑
        AipObj.Setvalue(vNoteName, ":PROP::LABEL:2"); //可选,(对于编辑器不可点击)
        AipObj.Setvalue(vNoteName, ":PROP:VALIGN:1");//设置竖直剧中
        AipObj.Setvalue(vNoteName, ":PROP:FACENAME:黑体");//设置字体
        AipObj.Setvalue(vNoteName, ":PROP:FRONTCOLOR:0");//设置字体颜色
        AipObj.Setvalue(vNoteName, ":PROP:FONTSIZE:16");//设置文字域字体大小
        AipObj.Setvalue(vNoteName, ":PROP:FONTBOLD:1"); //设置文字是否为BOLD
        AipObj.Setvalue(vNoteName, ":PROP:FONTITALIC:0"); //设置文字是否为斜体0正
        AipObj.Setvalue(vNoteName, "制作人：");//设置值
        AutoSeal(0, '9000:50000:0');//自动签章位置，左边距9000，上边距50000 盖章页码0
        var clob = AipObj.GetCurrFileBase64();
//		AipObj.CloseDoc(1);
        return clob;
    } else {
        return "";
    }
}

/****************************************************************************************************

 方法名：editNode                        设置AIP页面节点可编辑状态
 参  数：nodes                        可编辑的节点数组

 *****************************************************************************************************/
function editNode(AipObj, nodes) {
    var nodearr = nodes.split(",");
    for (i in nodearr) {
        var count = AipObj.SetValue(nodearr[i], ":PROP::LABEL:0");
    }
    return count;//1为成功
}

/****************************************************************************************************

 方法名：setvalue                        设置AIP页面节点值
 参  数：nodemaps                        可编辑的节点json字符串：{"cbiname":"王老五"}

 *****************************************************************************************************/
function setvalue(AipObj, nodemaps) {
//	nodemaps='{"cbiname":"王老五"}';
    var maps = JSON.parse(nodemaps);
    for (key in maps) {
        var count = AipObj.SetValue(key, maps[key]);
    }
    return count;//1为成功
}

/****************************************************************************************************

 方法名：AddSeal                        手动盖章或手写
 参  数：doaction                    操作类型：0 盖章，1 手写。

 *****************************************************************************************************/
function AddSeal(AipObj, doaction) {
    var islogin = remoteLogin(AipObj);//登陆远程服务器
    if (islogin != 0) {
        return islogin;
    } else {
        if (doaction == 0) {
            AipObj.CurrAction = 3592;
        } else if (doaction == 1) {
            AipObj.CurrAction = 264;
        }
    }
    return 0;
}

/****************************************************************************************************

 方法名：AutoSeal                    自动盖章
 参  数：usertype                    用户类型：2 服务器key用户
 doaction                    操作类型：0 普通印章
 searchtype                    定位盖章位置类型：只对普通印章doaction=0时有效，0 绝对坐标，1 文字定位
 searchstring                定位信息：只对普通印章doaction=0时有效
 searchtype为0时，searchstring为x:y:page格式，即200:500:0   x为横向坐标1-50000，y为纵向坐标1-50000，page为盖章页码从0开始
 searchtype为1时，searchstring为要查找的文字字符串

 *****************************************************************************************************/
function AutoSeal(AipObj, searchtype, searchstring) {
    var islogin = remoteLogin(AipObj);//登陆远程服务器
    AipObj.CurrAction = 3592;//设置盖章模式
    if (islogin != 0) {
        return "-500";//默认自定义错误 登陆失败
    } else {
        var num = AipObj.PageCount;
        var str = searchstring.split(":");
        if (searchtype == 0) {
            var isseal = AipObj.AddQifengSeal(0, 0 + "," + str[0] + ",0," + str[1] + ",50," + str[2], "", "AUTO_ADD_SEAL_FROM_PATH");
            if (isseal != 1) {
                return "0";
            } else {
                return "1";
            }
        } else if (searchtype == 1) {
            var isseal = AipObj.AddQifengSeal(0, "AUTO_ADD:0," + num + ",0,0,1," + searchstring + ")|(0,", "", "AUTO_ADD_SEAL_FROM_PATH");
            if (isseal != 1) {
                return "0";
            } else {
                return "1";
            }
        }
    }
}


/****************************************************************************************************

 方法名：browseFolder            打开文件夹
 参  数：path                    文件路径

 *****************************************************************************************************/
function browseFolder() {
    try {
        var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息
        var Shell = new ActiveXObject("Shell.Application");
//        var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为：我的电脑
        var Folder = Shell.BrowseForFolder(0, Message, 0); //起始目录为：桌面
        if (Folder != null) {
            Folder = Folder.items(); // 返回 FolderItems 对象
            Folder = Folder.item(); // 返回 Folderitem 对象
            Folder = Folder.Path; // 返回路径
            if (Folder.charAt(Folder.length - 1) != "\\") {
                Folder = Folder + "\\";
            }
            return Folder;
        }
    } catch (e) {
        alert(e.message);
    }
}

/****************************************************************************************************

 方法名：hiddenToolBar            隐藏工具栏

 *****************************************************************************************************/

function hiddenToolBar(AipObj) {
    if (AipObj == undefined || AipObj == null || AipObj == '') {
        alert("AIP对象获取失败");
    }
    AipObj.ShowDefMenu = 0;
    AipObj.ShowToolBar = 0;
    AipObj.ShowScrollBarButton = 2;
    AipObj.CurrAction = 1;
}

/****************************************************************************************************

 方法名：getNoteMap        获取表单节点和其对应的节点属性值

 *****************************************************************************************************/

function getNoteMap(AipObj) {
    var NoteInfo;
    var notemap = {};
    while (NoteInfo = AipObj.GetNextNote("sys_admin", 0, NoteInfo)) {
        var temp = NoteInfo.split(".")[1];
        var value = AipObj.GetValueEx(NoteInfo, 2, "", 0, "");
        notemap[temp] = value;
    }
    return notemap;
}


function openFile() {
    AipObj.CurrAction = 2824;
}

/****************************************************************************************************

 OA业务方法

 *****************************************************************************************************/

// 盖章函数
function gaiZhang() {
    AddSeal(AipObj, 0);
    // 盖章后禁用所有节点
    /*  var NoteInfo;
      while (NoteInfo = AipObj.GetNextNote("sys_admin", 0, NoteInfo)) {
          AipObj.SetValue(NoteInfo, ":PROP::LABEL:3");
      }*/
}

// 撤章函数
function cheZhang() {
    removeSeal(AipObj);
}